import { defineStore, acceptHMRUpdate } from 'pinia'

/**
 * 错误信息存储仓库
 */
export const useErrorStore = defineStore('errorStore', {
  /**
   * 所有的错误信息状态
   * @returns 返回一个对象，包含一个errors属性，类型为Record<string, any>
   */
  state: () => {
    return {
      errors: {} as Record<string, any>
    }
  },
  // 定义getters，包含两个方法：getError和hasError
  getters: {
    /**
     * 根据name获取对应的错误信息，如果没有则返回null
     * @param state 获取错误信息状态
     * @returns
     */
    getError: (state) => {
      return (name: string) => state.errors.errors[name] || null
    },
    /**
     * 判断是否有错误信息
     * @param state 获取错误信息状态
     * @returns
     */
    hasError: (state) => Object.keys(state.errors.errors).length > 0
  },
  actions: {
    /**
     * 设置错误信息
     * @param errors 错误信息
     */
    setErrors(errors: Record<string, string[]>) {
      Object.keys(errors).forEach(([key, value]) => {
        this.errors[key] = value[0]
      })
    },
    /**
     * 根据name删除对应的错误信息
     * @param name 错误信息名称
     */
    removeError(name: string) {
      if (this.errors[name]) {
        delete this.errors[name]
      }
    },
    /**
     * 清空所有错误信息
     */
    remove() {
      this.errors = {}
    }
  }
})

// 如果支持热模块替换，则接受热更新
if (import.meta.hot) {
  import.meta.hot.accept(acceptHMRUpdate(useErrorStore, import.meta.hot))
}
